package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strconv"
	"strings"
	"yundian/internel/app/helper"
	"yundian/internel/pkg/dbs"
	"yundian/internel/pkg/dingo"
	"yundian/internel/pkg/dingo/global"
)

// 第0项，代表一级行政区划，
// 第1项代表二级行政区划，
// 以此类推；使用getChildren接口时，仅为指定父级行政区划的子级区划
type TencentRegionsResult struct {
	Status      int    `json:"status"`  // 状态码，0为正常，其它为异常
	Message     string `json:"message"`    // 状态说明
	DataVersion string `json:"data_version"`// 行政区划数据版本，便于您判断更新
	Result      [][]struct {// 结果数组
		ID       string   `json:"id"` // 行政区划唯一标识（adcode）
		Name     string   `json:"name"` // 简称，如“内蒙古”
		Fullname string   `json:"fullname"` // 全称，如“内蒙古自治区”
		Pinyin   []string `json:"pinyin"` // 行政区划拼音，每一下标为一个字的全拼，如：	[“nei”,“meng”,“gu”]
		Location struct { // 经纬度
			Lat float64 `json:"lat"`
			Lng float64 `json:"lng"`
		} `json:"location"`
		Cidx []int `json:"cidx"` // 子级行政区划在下级数组中的下标位置
	} `json:"result"`
}

type TencentRegions struct {
	ID         int      `column:"id" json:"id"`
	RegionCode string   `column:"region_code" json:"regionCode"`
	Name       string   `column:"name" json:"name"`
	FullName   string   `column:"full_name" json:"fullName"`
	Pinyin     string   `column:"pinyin" json:"pinyin"`
	Lat        string   `column:"lat" json:"lat"`
	Lng        string   `column:"lng" json:"lng"`
	Level      int      `column:"level" json:"level"`
	ParentId   int      `column:"parent_id" json:"parentId"`
	Cidx       string   `column:"cidx" json:"cidx"`
}

func main()  {
	// 初始化mysql
	dingo.InitViper("./configs/adm.yaml")
	dbs.NewMysqlComponent().Step()

	resp, err := http.Get("http://apis.map.qq.com/ws/district/v1/list?key=Y53BZ-S3WW4-CCBUI-DHJ73-4RNNS-RBBEN&output=json")
	if err != nil {
		log.Println("请求失败")
	}
	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Println("body读取失败")
	}

	var rg TencentRegionsResult
	err = json.Unmarshal(body, &rg)
	district := rg.Result[0]
	// 插入省份
	for _, value := range district {
		id,_ := strconv.Atoi(value.ID[0:2])
		pinyin := strings.Join(value.Pinyin, ",")
		cidx := helper.Int2Str(value.Cidx)
		lat := fmt.Sprintf("%.5f", value.Location.Lat)
		lng := fmt.Sprintf("%.5f", value.Location.Lng)

		m := &TencentRegions{}
		m.ID = id
		m.RegionCode = value.ID
		m.Name = value.Name
		m.FullName = value.Fullname
		m.Pinyin = pinyin
		m.Lat = lat
		m.Lng = lng
		m.Level = 1
		m.ParentId = 0
		m.Cidx = cidx
		global.Orm.Table("tencent_regions").Create(m)
	}

}

func insertChildrenRegions()  {
	resp, err := http.Get("http://apis.map.qq.com/ws/district/v1/getchildren?id=110000?key=Y53BZ-S3WW4-CCBUI-DHJ73-4RNNS-RBBEN&output=json")
	if err != nil {
		log.Println("请求失败")
	}
	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Println("body读取失败")
	}

	var rg TencentRegionsResult
	err = json.Unmarshal(body, &rg)
	city := rg.Result[0]
}



//行政区划代码（adcode）规则说明
//
//代码共6位，前两位代表省（一级）、中间两位为市/地区（二级），最后两位为区县（三级）
//1）省级：前两位有值，后4位置0，如，河北省：130000
//2）市/地区：前4四位有值，包含省代码与市代码，最后两位置0，如河北省保定市：130600
//3）区县：6位全有值，包含前4位省市代码及区县代码，河北省保定市涿州市：130681
//4）直辖市、香港、澳门：
//同省级，在行政区划接口（ws/district/v1/list）中，其下直接为区级（没有二级结构填充）
//例：北京,东城区 （而非：“北京,北京,东城区”）
//5）直辖县：第3、4位为90的，为省直辖县
